package p.ithorns.framework.xxljob;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * XxlJobMeta
 * XxlJob任务元数据
 *
 * @author Ht.L
 * @date 2024-01-03 21:58
 * @since 1.0.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface XxlJobMeta {

    /**
     * 调度表达式
     */
    String cron() default "";

    /**
     * 任务说明
     */
    String jobDesc() default "";

    /**
     * 负责人
     */
    String author() default "";

    /**
     * 调度状态：0-停止，1-运行
     * 默认启动
     */
    int triggerStatus() default 1;

    /*
     * 默认为 ROUND 轮询方式
     * 可选的:
     *  FIRST（第一个）：固定选择第一个机器；
     *  LAST（最后一个）：固定选择最后一个机器；
     *  ROUND（轮询）：；
     *  RANDOM（随机）：随机选择在线的机器；
     *  CONSISTENT_HASH（一致性HASH）：每个任务按照Hash算法固定选择某一台机器，且所有任务均匀散列在不同机器上。
     *  LEAST_FREQUENTLY_USED（最不经常使用）：使用频率最低的机器优先被选举；
     *  LEAST_RECENTLY_USED（最近最久未使用）：最久未使用的机器优先被选举；
     *  FAILOVER（故障转移）：按照顺序依次进行心跳检测，第一个心跳检测成功的机器选定为目标执行器并发起调度；
     *  BUSYOVER（忙碌转移）：按照顺序依次进行空闲检测，第一个空闲检测成功的机器选定为目标执行器并发起调度；
     *  SHARDING_BROADCAST(分片广播)：广播触发对应集群中所有机器执行一次任务，同时系统自动传递分片参数；可根据分片参数开发分片任务；
     *
     * 参考 https://www.xuxueli.com/xxl-job/#步骤三：执行器组件配置
     */
    String routeStrategy() default "ROUND";


}